package org.convallaria.system.biz.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.convallaria.infrastruct.db.entity.BaseEntity;

import java.io.Serial;

/**
 * 系统岗位实体类
 * 
 * 功能特性：
 * - 支持岗位编码和名称管理
 * - 支持多租户数据隔离
 * - 支持软删除机制
 * - 支持乐观锁并发控制
 * - 支持数据审计追踪
 * - 支持岗位状态管理
 * - 支持岗位排序功能
 * 
 * 业务说明：
 * - 岗位管理是组织架构的重要组成部分
 * - 岗位与用户是多对多关系
 * - 岗位编码在同一租户内必须唯一
 * - 支持岗位的启用和停用状态控制
 * - 支持岗位的显示顺序管理
 * 
 * 关联关系：
 * - 与用户表：多对多关系，通过sys_user_post关联表
 * - 与租户表：多对一关系，通过tenant_id关联
 * 
 * 数据约束：
 * - post_code：岗位编码，在同一租户内唯一，必填
 * - post_name：岗位名称，必填
 * - post_sort：显示顺序，数值越小越靠前
 * - status：岗位状态，0=正常，1=停用
 * 
 * @author convallaria
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_post")
public class SysPost extends BaseEntity {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 岗位ID
     * 主键，自增长
     */
    @TableId("post_id")
    private Long postId;

    /**
     * 岗位编码
     * 岗位唯一编码，在同一租户内必须唯一
     * 用于业务标识和权限控制
     */
    @TableField("post_code")
    private String postCode;

    /**
     * 岗位名称
     * 岗位显示名称，必填字段
     */
    @TableField("post_name")
    private String postName;

    /**
     * 显示顺序
     * 岗位在列表中的显示顺序，数值越小越靠前
     */
    @TableField("post_sort")
    private Integer postSort;

    /**
     * 状态
     * 0=正常，1=停用
     * 停用的岗位不能被分配给用户
     */
    @TableField("status")
    private String status;

    /**
     * 租户ID
     * 多租户数据隔离标识
     */
    @TableField("tenant_id")
    private Long tenantId;
}
